package com.metal.gear.common.util.tree;


import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class SzlTreeUtil {

    public static <T,K> List<K> build(List<? extends SzlTreeNode<T,K>> list) {
        List<K> finalTreeList = new ArrayList<>();

        for (SzlTreeNode<T,K> treeNode : list) {
            if (treeNode.getParentId() == null||"".equals(treeNode.getParentId())) {
                finalTreeList.add((K)treeNode);
                innerBuild(list, treeNode);
            }
        }

        return finalTreeList.stream().sorted().collect(Collectors.toList());
    }

    /**
     * 递归处理
     *
     * @param SzlTreeNodes  数据集合
     * @param parentNode 当前节点
     */
    private static <T,K> void innerBuild(List<? extends SzlTreeNode<T,K>> SzlTreeNodes, SzlTreeNode<T,K> parentNode) {


        // 每层排序 SzlTreeNodeMap 实现了Comparable接口
        SzlTreeNodes = SzlTreeNodes.stream().sorted().collect(Collectors.toList());
        for (SzlTreeNode<T,K> childNode : SzlTreeNodes) {
            if (parentNode.getId().equals(childNode.getParentId())) {
                List<SzlTreeNode<T,K>> childrenList = parentNode.getChildrenList();
                childrenList.add(childNode);
                innerBuild(SzlTreeNodes, childNode);
            }
        }
    }
}
